const logger = require('../utils/logger');

/**
 * 统一错误处理中间件
 * @param {Error} err 错误对象
 * @param {Request} req 请求对象
 * @param {Response} res 响应对象
 * @param {Function} next 下一步函数
 */
function errorHandler(err, req, res, next) {
  // 如果没有错误，调用next继续执行
  if (!err) {
    return next();
  }

  // 记录错误日志
  logger.error('Unhandled error', {
    message: err.message,
    stack: err.stack,
    url: req.originalUrl,
    method: req.method,
    params: req.params,
    query: req.query,
    body: req.body
  });

  // 默认错误响应
  const response = {
    code: 500,
    message: 'Internal Server Error',
    data: null
  };

  // 如果是自定义错误且有特定的状态码和消息
  if (err.code) {
    response.code = err.code;
    response.message = err.message;
  }

  // 在开发环境中返回详细的错误信息
  if (process.env.NODE_ENV !== 'production' && response.code >= 500) {
    response.data = {
      error: err.message,
      stack: err.stack
    };
  }

  // 响应状态码统一设置成200
  res.status(200).json(response);
}

module.exports = errorHandler;